# -*- coding:utf-8 -*-
import MySQLdb

class MySql():
    def __init__(self,host,username,passwd,dbname,tablename):

        #连接上数据库
        self.conn = MySQLdb.connect(host, username, passwd, dbname, charset='utf8')

        #获取游标
        self.cursor = self.conn.cursor()

        #SQL语句查询结果
        try:
            self.count = self.cursor.execute('select * from ' + tablename)
        except Exception as e:
            print e

    #将数据以列表形式返回     -- 每一行一条用例
    def get_OneTestCase_row_RList(self, testNO=None):
        count =self.count
        cursor = self.cursor
        conn = self.conn

        #重置游标
        cursor.scroll(0, mode='absolute')

        #获取表内所有数据,以元祖的形式输出，每一行为一个元组  -- ((a,b),(c,d))
        alldata = cursor.fetchmany(count)

        #生成列表,将元祖转换成列表，以同样的形式形式输出
        datalist = []
        for test in alldata:
            datalist.append(list(test))

        #关闭游标、断开数据连接
        cursor.close()
        conn.close()

        for test in datalist:
            if testNO == test[0]:
                return test

        return datalist

    #将数据以字典形式返回     -- 每一行一条用例
    def get_OneTestCase_row_RDist(self):
        cursor = self.cursor
        datalist = self.get_OneTestCase_row_RList()

        # 获取MYSQL里面的数据字段名称--表头  输出的是特殊形式，需进行转换
        header = cursor.description

        #转换表头形式，以普通的列表形式进行输出
        headlist = []
        for i in range(len(header)):
            headlist.append(header[i][0])
        # print headlist

        #生成字典，每个用例以列表进行输出   [{a:1,b:2}，{c:1,d:2}]
        alldatalist = []
        for m in range(len(datalist)):
            datadist = {}
            for n in range(len(headlist)):
                datadist[headlist[n]] = datalist[m][n]  #单个形成字典
            alldatalist.append(datadist)
        # print alldatalist
        return alldatalist

    # 将数据以列表形式返回    -- 每一列一条用例
    def get_OneTestCase_column_RList(self):
        pass

    # 将数据以字典形式返回    -- 每一列一条用例
    def get_OneTestCase_column_RDist(self):
        pass

    # FilePath单独进行读取，将数据以字典形式返回
    def Globe_dict(self):
        datalist = self.get_OneTestCase_row_RList()
        redict = {}
        for i in datalist:
            redict[i[1]] = i[2]
        return redict

if __name__ == '__main__':
    aa = MySql('192.168.1.203', 'autotest', 'autotest', 'autotest', 'PreProcessor')
    print aa.get_OneTestCase_row_RList(testNO="TP2")